
package com.eva.android;

import android.util.Log;

import net.x52im.mobileimsdk.android.utils.MBThreadPoolExecutor;

import java.util.ArrayList;
import java.util.List;
import java.util.Observer;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;

/**
 * 一个观察者集合实现类，用于需要管理多个观察者的场景下。
 *
 * @author JackJiang
 * @since 8.0
 */
public class Observers {

    private final static String TAG = Observers.class.getSimpleName();
    /** 观察者列表 */
    private final List<Observer> observers = new ArrayList<>();

    public Observers(){
    }

    /**
     * 添加一个观察者。
     *
     * @param o 被添加的观察者对象
     */
    public void add(@NonNull Observer o){
        if(o != null){
            observers.add(o);
        }
        else{
            Log.w(TAG, "无效的参数，o=null！");
        }
    }

    /**
     * 移除一个观察者。
     *
     * @param o 被移除的观察者对象
     */
    public void remove(@NonNull Observer o){
        if(o != null) {
            this.observers.remove(o);
        }
        else{
            Log.w(TAG, "无效的参数，o=null！");
        }
    }

    /**
     * 清空观察者列表。
     */
    public void clear(){
        this.observers.clear();
    }

    /**
     * 通知所有观察者。
     *
     * @param datas 要通知的数据，可为空
     */
    public void notifyAll(@Nullable Object datas) {
        for (Observer obs : this.observers) {
            if(obs != null) {
                obs.update(null, datas);
            }
        }
    }

    /**
     * 返回观察者列表引用。
     *
     * @return 集合引用
     */
    public List<Observer> getObservers(){
        return this.observers;
    }
}
